最近安装了下vue cli3版本, 和vue cli2 相比文件目录少了很多配置,没有了build和config目录,那么像vue cli2 之前的关于端口号的配置,打包之后路径的配置,图片的配置 等等,应该去哪里配置呢,vue cli3 可以在项目根目录新建一个vue.config.js文件,像之前的很多繁琐配置,都可以在这个文件里配置啦。
官方是这样说的。vue.config.js 是一个可选的配置文件,如果项目的 (和 package.json 同级的) 根目录中存在这个文件,那么它会被 @vue/cli-service 自动加载。你也可以使用 package.json 中的 vue 字段,但是注意这种写法需要你严格遵照 JSON 的格式来写。
自己找了些搜集,整理了一下。

vue-cli3的源码部分:@vue/cli-service/lib/util/resolveClientEnv.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

module.exports = function resolveClientEnv (options, raw) {
const env = {}
Object.keys(process.env).forEach(key => {
if (prefixRE.test(key) || key === 'NODE_ENV') {
env[key] = process.env[key]
}
})
env.BASE_URL = options.baseUrl

if (raw) {
return env
}

for (const key in env) {
env[key] = JSON.stringify(env[key])
}
return {
'process.env': env
}

核心:env.BASE_URL = options.baseUrl;

在项目根目录创建一个 vue.config.js文件,可进行baseUrl配置,接口代理以及其他配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// vue.config.js 配置说明
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
// 这里只列一部分,具体配置参考文档
const path = require('path')
const debug = process.env.NODE_ENV !== 'production'
module.exports = {
// 部署生产环境和开发环境下的URL。
// 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上
//例如 https://www.my-app.com/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.my-app.com/my-app/,则设置 baseUrl 为 /my-app/。
//baseUrl 从 Vue CLI 3.3 起已弃用,请使用publicPath
//baseUrl: process.env.NODE_ENV === "production" ? "./" : "/",
publicPath: process.env.NODE_ENV === "production" ? "./" : "/",

// outputDir: 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)
outputDir: "./dist",
//用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
// assetsDir: "assets",
//指定生成的 index.html 的输出路径 (打包之后,改变系统默认的index.html的文件名)
indexPath: "./dist/index.html",
//默认情况下,生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存。你可以通过将这个选项设为 false 来关闭文件名哈希。(false的时候就是让原来的文件名不改变)
filenameHashing: false,

// lintOnSave:{ type:Boolean default:true } 问你是否使用eslint
lintOnSave: true,

/**
* 生产环境是否生成 sourceMap 文件
* 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
* */
productionSourceMap: false,
chainWebpack: (config) => {
if (debug) { // 开发环境配置
config.devtool = 'cheap-module-eval-source-map'
} else { // 生产环境配置
config.devtool = '#source-map'
}
// 修改文件引入自定义路径
config.resolve.alias
.set('@', path.resolve(__dirname, './src'))
.set('@views', path.resolve(__dirname, './src/views'))
.set('@components', path.resolve(__dirname, './src/components'))
.set('@assets', path.resolve(__dirname, './src/assets'))
},
// 和 chainWebpack 类似
// configureWebpack: (config) => {
// Object.assign(config, { // 开发生产共同配置, 配置别名
// resolve: {
// extensions: ['.js', '.json', '.vue'],
// alias: {
// '@': path.resolve(__dirname, './src') //设置路径别名
// // '@views': path.resolve(__dirname, './src/views'),
// // '@components': path.resolve(__dirname, './src/components'),
// // '@assets': path.resolve(__dirname, './src/assets')
// }
// }
// })
// },

// 它支持webPack-dev-server的所有选项
devServer: {
host: "0.0.0.0", //指定使用地址,默认localhost, 0.0.0.0代表可以被外界访问
port: 8080, // 端口号
https: false, // 编译失败时刷新页面
open: true, //配置自动启动浏览器
hot: true, // 开启热加载
hotOnly: false,
// proxy: 'http://localhost:4000' // 配置跨域处理,只有一个代理

// 配置多个代理
// proxy: {
// "/api": {
// target: "<url>",// 要访问的接口域名
// ws: true,// 是否启用websockets
// changeOrigin: true, //开启代理:在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题
// pathRewrite: {
// '^/api': '' //这里理解成用'/api'代替target里面的地址,比如我要调用'http://40.00.100.100:3002/user/add',直接写'/api/user/add'即可
// }
// },
// "/foo": {
// target: "<other_url>"
// }
// }
},
/**
* 第三方插件配置
*/
pluginOptions: {}
};